1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy
4 : externaltools/classes/class.xpwebinfo.inc.php
5 : - Modulgruppe: ExternalTools
6 : - Beschreibung: In dieser Datei ist die Klasse XPWebInfo implementiert.
7 : - Version: 1.0 13/10/05
8 : - Autor(en): Christian Gerhardt <case42@gmx.net>
9 : +---------------------------------------------------------------------------+
10 : This program is free software; you can redistribute it and/or
11 : modify it under the terms of the GNU General Public License
12 : as published by the Free Software Foundation; either version 2
13 : of the License, or any later version.
14 : +---------------------------------------------------------------------------+
15 : This program is distributed in the hope that it will be useful,
16 : but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : GNU General Public License for more details.
19 : You should have received a copy of the GNU General Public License
20 : along with this program; if not, write to the Free Software
21 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 : +--------------------------------------------------------------------------*/
23 : /**
24 : * In dieser Datei ist die Klasse XPWebInfo implementiert.
25 : * @package eStudy.ExternalTools
26 : * @version 1.0, 13/10/05
27 : * @author Christian Gerhardt <case42@gmx.net>
28 : */
29 :
30 1 : if (!defined('PATH_TO_ROOT'))
31 1 : define("PATH_TO_ROOT", "../../");
32 :
33 : /**Die Basisklasse*/
34 1 : require_once ("class.toolinfo.inc.php");
35 : //für Passwort-behandlung
36 1 : require_once ("class.passwords.inc.php");
37 : /**
38 : * Erster Teil der XPWeb-Benutzerverwaltung.
39 : * Zuordnung zwischen dem (externen)Benutzernamen und dem
40 : * (internen)XPWeb-Benutzernamen.
41 : */
42 1 : define("XPWEB_MEMBERS_TABLE", "team_members");
43 : /**
44 : * Zweiter Teil der XPWeb-Benutzerverwaltung.
45 : * Zusätzliche Benutzerinformationen, wie z.B. der Emailadresse.
46 : */
47 1 : define("XPWEB_USERS_TABLE", "tbl_users");
48 : /**
49 : * Die Tabelle in der XPWeb seine Projekte verwaltet.
50 : */
51 1 : define("XPWEB_PROJECTS_TABLE", "projects");
52 : /**
53 : * Die Tabelle in der XPWeb die Projektzugehörigkeiten seiner Benutzer speichert.
54 : */
55 1 : define("XPWEB_PROJECTS_AFFECTATION_TABLE", "projects_affectation");
56 : /**
57 : * Die Tabelle in der XPWeb seine Benutzerprofile verwaltet.
58 : */
59 1 : define("XPWEB_PROFILE_TABLE", "user_profiles");
60 : /**
61 : * Standard XPWeb-Profil von Studenten.
62 : */
63 1 : define("XPWEB_DEFAULT_PROFILE", 3); //Developer
64 :
65 : /**
66 : * Standard XPWeb-Profil von Dozenten.
67 : */
68 1 : define("XPWEB_ADMINISTRATOR_PROFILE", 2); //Admin
69 :
70 : /**
71 : * Standard Beschreibung von XPWeb-Benutzern die von eStudy angelegt wurden.
72 : */
73 1 : define("XPWEB_DEFAULT_DESCRIPTION", "eStudy created this user.");
74 : /**
75 : * ToolInfo Klasse für XPWeb 3.x .
76 : * @package eStudy.ExternalTools
77 : * @version 1.0, 13/10/05
78 : * @author Christian Gerhardt <case42@gmx.net>
79 : */
80 1 : class XPWebInfo extends ToolInfo {
81 : /**
82 : * Array mit Ausgabestrings.
83 : * @var array
84 : * @access private
85 : */
86 : public $strings;
87 :
88 : /**
89 : * Erzeugt ein neues XPWebInfo Objekt.
90 : * @param integer $id - die Tool ID
91 : * @param string $image - das Icon, das angezeigt werden soll.
92 : */
93 : public function XPWebInfo($id, $image = null) {
94 0 : parent::ToolInfo($image);
95 0 : $this->toolName = "XPWeb 3.x";
96 0 : $this->toolID = $id;
97 0 : $this->strings['label_create_projects'] = "Automatisch ein Projekt für den Kurs anlegen.";
98 0 : $this->strings['label_usergroup_students'] = "Automatische Benutzergruppe für Studenten";
99 0 : $this->strings['label_usergroup_teachers'] = "Automatische Benutzergruppe für Dozenten";
100 0 : $this->strings['label_usergroup_assistents'] = "Automatische Benutzergruppe für das Sekretariat";
101 0 : $this->strings['info_usergroups'] = "Geben Sie hier die XPWeb-Benutzergruppen an, die automatisch den "."eStudy-Benutzergruppen zugeordnet werden sollen. Wenn Sie die Felder offen lassen, oder nicht "."existente XPWeb-Benutzergruppen angeben, werden Standardwerte eingesetzt.";
102 0 : $this->strings['default_project_description'] = "Von eStudy automatisch generiertes Projekt des Kurses \"%s\"";
103 0 : }
104 : /**
105 : * Prüft ob der aktuelle eStudy-Benutzer bereits in die
106 : * XPWeb Benutzertabelle aufgenommen worden ist.
107 : * @access public
108 : * @return bool <i>true</i>-Falls der Benutzer bereits eingetragen ist.
109 : */
110 : public function checkForUser() {
111 0 : $name = $this->createXPWebUserName();
112 0 : $query = "SELECT COUNT(*) FROM %s WHERE name = '%s' LIMIT 1";
113 0 : $query = sprintf($query, XPWEB_MEMBERS_TABLE, Data::toMysql($name));
114 0 : $result = $this->toolDB->get_var($query);
115 0 : if ($result > 0) {
116 0 : return true;
117 : } else {
118 0 : return false;
119 : }
120 : }
121 : /**
122 : * Fügt den aktuellen e-Study-Benutzer in die XPWeb-Benutzertabelle ein.
123 : * @access public
124 : * @return void
125 : */
126 : public function insertNewUser() {
127 0 : global $EZSQL_ERROR;
128 0 : $name = $this->createXPWebUserName();
129 0 : $query = "INSERT INTO %s ";
130 0 : $query.= "(`profile_id`, `name`, `description`) ";
131 0 : $query.= "VALUES ('%s','%s','%s' )";
132 0 : $query = sprintf($query, XPWEB_MEMBERS_TABLE, $this->getXPWebDefaultProvile($this->userData['Usergroup']), Data::toMysql($name), XPWEB_DEFAULT_DESCRIPTION);
133 0 : if ($this->toolDB->query($query)) {
134 0 : $xpweb_username = $this->toolDB->insert_id;
135 0 : $query = "INSERT INTO %s ";
136 0 : $query.= "(`username`, `password`, `email`, `question`, `answer`) ";
137 0 : $query.= "VALUES ('%s','%s','%s','','')";
138 0 : $query = sprintf($query, XPWEB_USERS_TABLE, $xpweb_username, Passwords::GenerateHash($this->userLogonData['password'], "", HASH_XPWEB), Data::toMysql($this->userData['Email']));
139 0 : return (bool)$this->toolDB->query($query);
140 : }
141 0 : return false;
142 : }
143 : /**
144 : * Gibt das einer eStudy-Benutzergruppe zugeordnete XPWeb-Profil zurück.
145 : * Die Zuordnung kann über die ToolOptionen
146 : * <code>
147 : * usergroup_teachers, usergroup_student, usergroup_assistents
148 : * </code>
149 : * festgelegt werden, indem der Name des XPWeb-Profil angegeben wird.<br />
150 : * Sollte kein Profil angegeben worden sein, werden die Standardprofile
151 : * verwendet.<br />
152 : * eStudy-Admins erhalten das gleiche Profil wie ein Dozent.
153 : *
154 : * @access public
155 : * @param integer $usergroup - die Benutergruppe
156 : * @return integer - das XPWeb-Profil
157 : */
158 : public function getXPWebDefaultProvile($usergroup) {
159 0 : $query = "SELECT id FROM ".XPWEB_PROFILE_TABLE." WHERE name='%s' LIMIT 1";
160 : switch ($usergroup) {
161 0 : case ADMIN:
162 0 : case DOZENT:
163 0 : if (isset($this->toolOptions['usergroup_teachers']) && $this->toolOptions['usergroup_teachers']) {
164 0 : $id = $this->toolDB->get_var(sprintf($query, $this->toolOptions['usergroup_teachers']));
165 0 : if ($id) {
166 0 : return $id;
167 : }
168 0 : }
169 0 : return XPWEB_ADMINISTRATOR_PROFILE;
170 0 : case STUDENT:
171 0 : case ALUMNUS:
172 0 : case SCHUELER:
173 0 : case GAST:
174 0 : if (isset($this->toolOptions['usergroup_student']) && $this->toolOptions['usergroup_student']) {
175 0 : $id = $this->toolDB->get_var(sprintf($query, $this->toolOptions['usergroup_teachers']));
176 0 : if ($id) {
177 0 : return $id;
178 : }
179 0 : }
180 0 : return XPWEB_DEFAULT_PROFILE;
181 0 : case SEKRETARIAT:
182 0 : if (isset($this->toolOptions['usergroup_assistents']) && $this->toolOptions['usergroup_assistents']) {
183 0 : $id = $this->toolDB->get_var(sprintf($query, $this->toolOptions['usergroup_teachers']));
184 0 : if ($id) {
185 0 : return $id;
186 : }
187 0 : }
188 0 : return XPWEB_DEFAULT_PROFILE;
189 0 : default:
190 0 : return XPWEB_DEFAULT_PROFILE;
191 0 : }
192 : }
193 : /**
194 : * Aktualisiert die XPweb-Benutzertabelle, nachdem der
195 : * eStudy-Benutzer innerhalb von eStudy seine Logindaten geändert hat.
196 : * @access public
197 : * @param String $oldLogin - Der alte Loginname des Benutzers.
198 : * @param String $newLogin - Der neue Loginname des Benutzers.
199 : * @param String $password - Das Passwort des Benutzers.
200 : * @return bool - <i>true</i> wenn alles geklappt hat.
201 : */
202 : public function updateLogin($oldLogin, $newLogin, $password) {
203 0 : global $EZSQL_ERROR;
204 0 : if ($this->checkForUser()) {
205 0 : $name = $this->createXPWebUserName();
206 0 : $query = "SELECT id FROM %s WHERE name='%s'";
207 0 : $query = sprintf($query, XPWEB_MEMBERS_TABLE, Data::toMysql($name));
208 0 : $xpweb_username = $this->toolDB->get_var($query);
209 0 : if ($EZSQL_ERROR) return false;
210 0 : $query = "UPDATE %s SET password='%s' WHERE username='%s'";
211 0 : $query = sprintf($query, XPWEB_USERS_TABLE, Passwords::GenerateHash($password, "", HASH_XPWEB), Data::toMysql($xpweb_username));
212 0 : $this->toolDB->query($query);
213 0 : if ($EZSQL_ERROR) return false;
214 0 : } else {
215 0 : $this->insertNewUser();
216 : }
217 0 : return true;
218 : }
219 : /**
220 : *
221 : * @access public
222 : * @param array $hiddenVars
223 : * @return
224 : */
225 : public function showOptionsDialog($hiddenVars) {
226 0 : $result = $this->checkPostVars();
227 0 : if ($result === false) {
228 0 : $this->echoDialog($hiddenVars);
229 0 : }
230 0 : return $result;
231 : }
232 : /**
233 : * Handelt spezielle Events ab, auf die mit den ToolOptionen reagiert werden kann.
234 : * <p>
235 : * Auf <code>OPTIONS_EVENT_SHOW_PAGE</code> wird reagiert
236 : * in dem ein neues Projekt mit dem Kursnamen angelegt wird,
237 : * und der aktuelle Benutzer in dieses Projekt eingetragen wird.
238 : * </p>
239 : * @access public
240 : * @param integer $event - der Event der behandelt werden muss.
241 : * @return void
242 : */
243 : public function optionsHandler($event) {
244 0 : global $db, $settings;
245 : switch ($event) {
246 0 : case OPTIONS_EVENT_SHOW_PAGE:
247 0 : $query = "SELECT Name FROM %scourses WHERE ID='%s'";
248 0 : $query = sprintf($query, $settings['dbPrefix'], $_SESSION['course']);
249 0 : $courseName = $db->get_var($query);
250 0 : if ((bool)$courseName) {
251 0 : $projectID = $this->createProject($courseName);
252 0 : $this->assignToProject($projectID);
253 0 : }
254 0 : break;
255 : }
256 0 : }
257 : /**
258 : *
259 : * @access private
260 : * @return mixed
261 : */
262 : public function checkPostVars() {
263 0 : if (isset($_POST['optionsDialog'])) {
264 0 : if (isset($_POST['okButton'])) {
265 0 : $result = array();
266 0 : if (isset($_POST['create_projects'])) {
267 0 : $result['create_projects'] = true;
268 0 : } else {
269 0 : $result['create_projects'] = false;
270 : }
271 0 : if (isset($_POST['usergroup_students'])) {
272 0 : $result['usergroup_students'] = $_POST['usergroup_students'];
273 0 : }
274 0 : if (isset($_POST['usergroup_teachers'])) {
275 0 : $result['usergroup_teachers'] = $_POST['usergroup_teachers'];
276 0 : }
277 0 : if (isset($_POST['usergroup_assistents'])) {
278 0 : $result['usergroup_assistents'] = $_POST['usergroup_assistents'];
279 0 : }
280 0 : return $result;
281 : }
282 0 : return true;
283 : }
284 0 : return false;
285 : }
286 : /**
287 : *
288 : * @access private
289 : * @param array $hiddenVarsm
290 : * @return
291 : */
292 : public function echoDialog($hiddenVars) {
293 0 : $inputString = "<p class='pForm'><input type='%s' name='%s' value='%s' %s /></p>\n";
294 0 : printf("<form method='post' action='%s'>\n", PATH_TO_ROOT.SCRIPT_NAME);
295 0 : echo "<table class='tableBorder'>\n";
296 0 : Output::echoTableHead("Spezielle Einstellungen von ".$this->toolName, 2);
297 0 : echo "<tr><td colspan='2'>\n";
298 0 : printf($inputString, "hidden", "optionsDialog", "true", "");
299 0 : foreach($hiddenVars as $key => $value) {
300 0 : printf($inputString, "hidden", $key, $value, "");
301 0 : }
302 0 : echo $this->strings['label_create_projects'];
303 0 : if (isset($this->toolOptions['create_projects']) && $this->toolOptions['create_projects'] == true) {
304 0 : printf($inputString, "checkbox", 'create_projects', 'true', "checked='checked'");
305 0 : } else {
306 0 : printf($inputString, "checkbox", 'create_projects', 'false', "");
307 : }
308 0 : echo "</td></tr>\n";
309 0 : echo "<tr><td colspan='2'>\n";
310 0 : echo "<hr />\n";
311 0 : echo "</td></tr>\n";
312 0 : echo "<tr><td colspan='2'>\n";
313 0 : echo $this->strings['info_usergroups'];
314 0 : echo "</td></tr>\n";
315 0 : echo "<tr><td>\n";
316 0 : echo $this->strings['label_usergroup_students'];
317 0 : echo "</td><td width='50%'>\n";
318 0 : printf($inputString, "text", 'usergroup_students', isset($this->toolOptions['usergroup_students']) ? $this->toolOptions['usergroup_students'] : '', "style='width:99%;'");
319 0 : echo "</td></tr>\n";
320 0 : echo "<tr><td>\n";
321 0 : echo $this->strings['label_usergroup_teachers'];
322 0 : echo "</td><td width='50%'>\n";
323 0 : printf($inputString, "text", 'usergroup_teachers', isset($this->toolOptions['usergroup_teachers']) ? $this->toolOptions['usergroup_teachers'] : '', "style='width:99%;'");
324 0 : echo "</td></tr>\n";
325 0 : echo "<tr><td>\n";
326 0 : echo $this->strings['label_usergroup_assistents'];
327 0 : echo "</td><td width='50%'>\n";
328 0 : printf($inputString, "text", 'usergroup_assistents', isset($this->toolOptions['usergroup_assistents']) ? $this->toolOptions['usergroup_assistents'] : '', "style='width:99%;'");
329 0 : echo "</td></tr>\n";
330 0 : Output::echoDialogBottom(null, 2);
331 0 : echo "</table>\n";
332 0 : echo "</form>\n";
333 0 : }
334 : /**
335 : * Erzeugt ein XPWeb-Projekt.
336 : * Falls ein Projekt mit dem übergebenen Namen bereits exisitiert,
337 : * wird nur ID dieses Projekts zurückgegeben.
338 : *
339 : * @access public
340 : * @param String $projectName
341 : * @return integer - die ID des neu erzeugten Projekts.
342 : */
343 : public function createProject($projectName) {
344 0 : $query = "SELECT id FROM %s WHERE name='%s'";
345 0 : $query = sprintf($query, XPWEB_PROJECTS_TABLE, Data::toMysql($projectName));
346 0 : $projectID = $this->toolDB->get_var($query);
347 0 : if (!$projectID) {
348 0 : $query = "INSERT INTO %s (name, description) VALUES('%s', '%s')";
349 0 : $query = sprintf($query, XPWEB_PROJECTS_TABLE, Data::toMysql($projectName), sprintf($this->strings['default_project_description'], Data::toMysql($projectName)));
350 0 : $this->toolDB->query($query);
351 0 : $projectID = $this->toolDB->insert_id;
352 0 : }
353 0 : return $projectID;
354 : }
355 : /**
356 : * Füg den aktuellen eStudy-Benutzer einem XPWeb-Projekt hinzu,
357 : * falls dieser noch nicht Mitglied ist.
358 : * @access public
359 : * @param integer $projectID - die ID des XPWeb-Projekts.
360 : * @return void
361 : */
362 : public function assignToProject($projectID) {
363 0 : $name = $this->createXPWebUserName();
364 0 : $query = "SELECT id FROM %s WHERE name='%s'";
365 0 : $query = sprintf($query, XPWEB_MEMBERS_TABLE, $name);
366 0 : $xpwebID = $this->toolDB->get_var($query);
367 0 : $query = "SELECT * FROM %s WHERE project_id='%s' AND team_member_id='%s'";
368 0 : $query = sprintf($query, XPWEB_PROJECTS_AFFECTATION_TABLE, (int)$projectID, (int)$xpwebID);
369 0 : $project_data = $this->toolDB->get_row($query);
370 0 : if (!$project_data) {
371 0 : $query = "INSERT INTO %s SET project_id='%s', team_member_id='%s'";
372 0 : $query = sprintf($query, XPWEB_PROJECTS_AFFECTATION_TABLE, (int)$projectID, (int)$xpwebID);
373 0 : $this->toolDB->query($query);
374 0 : }
375 0 : }
376 : /**
377 : * Erzeugt einen XPWeb-Benutzernamen.
378 : * Der Benutzername besteht aus dem Vornamen und Nachnamen
379 : * des eStudy-Benutzers verbunden mit einem Loginnamen, um
380 : * die Eindeutigkeit sicherzustellen.
381 : *
382 : * @access public
383 : * @return String der generierte XPWeb-Benutzername.
384 : */
385 : public function createXPWebUsername() {
386 0 : return sprintf("%s %s (%s)", $this->userData['Vorname'], $this->userData['Nachname'], $this->userData['ShortName'] // um den benutzernamen eindeutig zu machen
387 0 : );
388 : }
389 : }
|